package com.cherry.web.controller.system;

import com.cherry.common.core.controller.BaseController;
import com.cherry.common.core.domain.AjaxResult;
import com.cherry.common.core.page.TableDataInfo;
import com.cherry.system.domain.SysPost;
import com.cherry.system.service.ISysPostService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * 岗位管理 控制层
 *
 * @author 孙晨阳
 */
@Controller
@RequestMapping("/system/post")
public class SysPostController extends BaseController {

    private static final String PREFIX = "system/post";

    @Resource
    private ISysPostService postService;

    /**
     * 跳转至岗位管理页面
     *
     * @return 岗位管理页面
     */
    @GetMapping()
    public String post() {
        return PREFIX + "/post";
    }

    /**
     * 根据条件分页查询岗位列表
     *
     * @param post 岗位信息
     * @return 岗位集合信息
     */
    @PostMapping("/list")
    @ResponseBody
    public TableDataInfo list(SysPost post) {
        startPage();
        List<SysPost> list = postService.selectPostList(post);
        return getDataTable(list);
    }

    /**
     * 查询所有岗位列表
     *
     * @param post 岗位信息
     * @return 岗位集合信息
     */
    @PostMapping("listAll")
    @ResponseBody
    public AjaxResult listAll(SysPost post) {
        List<SysPost> list = postService.selectPostList(post);
        return success(list);
    }

    /**
     * 跳转至新增岗位页面
     *
     * @return 新增岗位页面
     */
    @GetMapping("/add")
    public String add() {
        return PREFIX + "/add";
    }

    /**
     * 新增岗位保存
     *
     * @param post 岗位信息
     * @return 结果
     */
    @PostMapping("/add")
    @ResponseBody
    public AjaxResult addSave(SysPost post) {
        post.setCreateBy(getLoginName());
        return toAjax(postService.insertPost(post));
    }

    /**
     * 跳转至修改岗位页面
     *
     * @param postId 岗位ID
     * @param mmap   传递的属性键值对
     * @return 岗位修改页面
     */
    @GetMapping("/edit/{postId}")
    public String edit(@PathVariable("postId") Long postId, ModelMap mmap) {
        mmap.put("post", postService.selectPostById(postId));
        return PREFIX + "/edit";
    }

    /**
     * 修改岗位信息
     *
     * @param post 岗位信息
     * @return 结果
     */
    @PostMapping("/edit")
    @ResponseBody
    public AjaxResult editSave(@Validated SysPost post) {
        post.setUpdateBy(getLoginName());
        return toAjax(postService.updatePost(post));
    }

    /**
     * 删除岗位
     *
     * @param ids 要删除的岗位的ID
     * @return
     */
    @PostMapping("/remove")
    @ResponseBody
    public AjaxResult remove(String ids) {
        try {
            return toAjax(postService.deletePostByIds(ids));
        } catch (Exception e) {
            return error(e.getMessage());
        }
    }

    /**
     * 岗位状态修改
     *
     * @return 结果
     */
    @PostMapping("/changeStatus")
    @ResponseBody
    public AjaxResult changeStatus(SysPost post) {
        return toAjax(postService.changeStatus(post));
    }
}
